package link;

import math.ListNode;

/**
 * Created by fengliejv on 2017/11/13.
 */
public class AddTwoNumbers2 {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode head = new ListNode();
        ListNode tail = head;
        int carry = 0;
        while (l1 != null || l2 != null) {
            int t1 = l1 == null ? 0 : l1.val;
            int t2 = l2 == null ? 0 : l2.val;
            ListNode node = new ListNode((t1 + t2 + carry) % 10);
            tail.next = node;
            tail = tail.next;
            carry = (t1 + t2 + carry) / 10;
            if (l1 != null) {
                l1 = l1.next;
            }
            if (l2 != null) {
                l2 = l2.next;
            }
        }
        if (carry != 0) {
            tail.next = new ListNode(carry);
        }
        return head.next;
    }


//    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
//        if(l2==null){
//            return l1;
//        }
//        if(l1==null){
//            return l2;
//        }
//
//        add(l1,l2,0);
//        return l1;
//
//    }
//    private void add(ListNode l1,ListNode l2,int carry){
//        if(l2==null){
//            if(carry==0) {
//                return;
//            }else {
//                l2 = new ListNode(1);
//                carry=0;
//            }
//        }
//
//        int sum = l1.val+l2.val+carry;
//        if(sum>9){
//            sum = sum-10;
//            carry=1;
//        }else {
//            carry=0;
//        }
//        l1.val=sum;
//
//        if(l1.next==null){
//            if(carry==0){
//                l1.next = l2.next;
//                return;
//            }else {
//                l1.next = new ListNode(1);
//                carry=0;
//            }
//        }
//        add(l1.next,l2.next,carry);
//
//    }
}
